package com.mindskip.xzs.utility;
//这段代码主要包含了一些常用的数据转换方法，用于前后端数据传输的处理：
//在前端，这些方法可以用于数据展示、数据处理和数据提交等方面；
//在后端，这些方法可以用于数据接收、处理和返回给前端等方面。
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 考试工具类，包含一些处理考试相关数据的方法
 */
public class ExamUtil {

    /**
     * 将分数转换为视觉化的字符串表示
     *
     * @param score 分数
     * @return 字符串表示的分数
     */
    public static String scoreToVM(Integer score) {
        if (score % 10 == 0) {
            return String.valueOf(score / 10);
        } else {
            return String.format("%.1f", score / 10.0);
        }
    }

    /**
     * 将视觉化的分数字符串转换为整数分数
     *
     * @param score 视觉化的分数字符串
     * @return 整数分数
     */
    public static Integer scoreFromVM(String score) {
        if (score == null) {
            return null;
        } else {
            return (int) (Float.parseFloat(score) * 10);
        }
    }

    /**
     * 将秒数转换为可视化的时间表示
     *
     * @param second 秒数
     * @return 可视化的时间表示
     */
    public static String secondToVM(Integer second) {
        String dateTimes;
        long days = second / (60 * 60 * 24);
        long hours = (second % (60 * 60 * 24)) / (60 * 60);
        long minutes = (second % (60 * 60)) / 60;
        long seconds = second % 60;
        if (days > 0) {
            dateTimes = days + "天 " + hours + "时 " + minutes + "分 " + seconds + "秒";
        } else if (hours > 0) {
            dateTimes = hours + "时 " + minutes + "分 " + seconds + "秒";
        } else if (minutes > 0) {
            dateTimes = minutes + "分 " + seconds + "秒";
        } else {
            dateTimes = seconds + " 秒";
        }
        return dateTimes;
    }

    private static final String ANSWER_SPLIT = ",";

    /**
     * 将内容数组转换为字符串
     *
     * @param contentArray 内容数组
     * @return 字符串表示的内容
     */
    public static String contentToString(List<String> contentArray) {
        return contentArray.stream().sorted().collect(Collectors.joining(ANSWER_SPLIT));
    }

    /**
     * 将内容字符串转换为数组
     *
     * @param contentArray 内容字符串
     * @return 内容数组
     */
    public static List<String> contentToArray(String contentArray) {
        return Arrays.asList(contentArray.split(ANSWER_SPLIT));
    }

    private static final String FORM_ANSWER_SPLIT = "_";

    /**
     * 获取字符串中最后一个下划线后面的数字
     *
     * @param str 输入字符串
     * @return 最后一个下划线后面的数字
     */
    public static Integer lastNum(String str) {
        Integer start = str.lastIndexOf(FORM_ANSWER_SPLIT);
        return Integer.parseInt(str.substring(start + 1));
    }
}
